package com.ruoyi.energy.service;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 设备数据统计服务接口
 * 基于TDengine实现设备数据统计、趋势分析等功能
 * 
 * @author ruoyi
 * @date 2025-06-30
 */
public interface IEmsDeviceDataStatisticsService {
    
    /**
     * 获取设备概览统计
     * 
     * @return 设备概览统计数据
     */
    Map<String, Object> getDeviceOverviewStatistics();
    
    /**
     * 获取设备能耗统计
     * 
     * @param deviceCode 设备编码（可选）
     * @param energyType 能源类型（可选）
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param groupBy 分组方式（hour/day/month）
     * @return 能耗统计数据
     */
    List<Map<String, Object>> getDeviceEnergyStatistics(String deviceCode, String energyType, 
                                                        Date startTime, Date endTime, String groupBy);
    
    /**
     * 获取设备运行状态统计
     * 
     * @param deviceCode 设备编码（可选）
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 运行状态统计数据
     */
    Map<String, Object> getDeviceStatusStatistics(String deviceCode, Date startTime, Date endTime);
    
    /**
     * 获取设备效率分析
     * 
     * @param deviceCode 设备编码
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 效率分析数据
     */
    Map<String, Object> getDeviceEfficiencyAnalysis(String deviceCode, Date startTime, Date endTime);
    
    /**
     * 获取设备负载趋势
     * 
     * @param deviceCode 设备编码
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param interval 时间间隔（1h/4h/1d）
     * @return 负载趋势数据
     */
    List<Map<String, Object>> getDeviceLoadTrend(String deviceCode, Date startTime, Date endTime, String interval);
    
    /**
     * 获取设备告警统计
     * 
     * @param deviceCode 设备编码（可选）
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 告警统计数据
     */
    Map<String, Object> getDeviceAlarmStatistics(String deviceCode, Date startTime, Date endTime);
    
    /**
     * 获取设备对比分析
     * 
     * @param deviceCodes 设备编码列表
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param metrics 对比指标列表
     * @return 对比分析数据
     */
    List<Map<String, Object>> getDeviceComparisonAnalysis(List<String> deviceCodes, Date startTime, 
                                                          Date endTime, List<String> metrics);
    
    /**
     * 获取设备峰谷电分析
     * 
     * @param deviceCode 设备编码
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 峰谷电分析数据
     */
    Map<String, Object> getDevicePeakValleyAnalysis(String deviceCode, Date startTime, Date endTime);
    
    /**
     * 获取设备数据质量报告
     * 
     * @param deviceCode 设备编码（可选）
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 数据质量报告
     */
    Map<String, Object> getDeviceDataQualityReport(String deviceCode, Date startTime, Date endTime);
    
    /**
     * 获取设备能耗排行榜
     * 
     * @param energyType 能源类型
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param limit 排行数量
     * @return 能耗排行榜
     */
    List<Map<String, Object>> getDeviceEnergyRanking(String energyType, Date startTime, Date endTime, int limit);
    
    /**
     * 获取设备实时监控数据
     * 
     * @param deviceCodes 设备编码列表（可选）
     * @return 实时监控数据
     */
    List<Map<String, Object>> getDeviceRealtimeMonitorData(List<String> deviceCodes);
    
    /**
     * 导出设备统计报表
     * 
     * @param reportType 报表类型（energy/status/efficiency）
     * @param deviceCode 设备编码（可选）
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 报表数据
     */
    List<Map<String, Object>> exportDeviceStatisticsReport(String reportType, String deviceCode, 
                                                           Date startTime, Date endTime);
}
